package com.xzcedu.udp;

import java.io.IOException;
import java.net.*;

/**
 * @author 徐州城
 * @version 1.0
 * UDP发送端 ==> 也可以接收数据
 * 1. 编写一个接收端A，和一个发送端B
 * 2. 接收端A在9999端口等待接收数据(receive)
 * 3. 发送端B向接收端A 发送 数据 "hello，明天吃火锅~"
 * 4. 接收端A接收到 发送端B发送的数据，回复 "好的，明天见"，再退出
 * 5. 发送端接收 回复的数据，再退出
 */
public class UDPSenderB {
    public static void main(String[] args) throws IOException {

        //1. 创建 DatagramSocket 对象，准备在9998端口 接收数据
        DatagramSocket socket = new DatagramSocket(9998);

        //2. 将需要发送的数据，封装到 DatagramPacket对象
        byte[] data = "hello 明天吃火锅".getBytes();//InetAddress.getByName("本机IP地址") InetAddress.getLocalHost()
        //说明：封装的 DatagramPacket对象 data 内容字节数组，从0开始 到 data.length 结束，主机(IP)，端口
        DatagramPacket packet =
                new DatagramPacket(data, 0, data.length, InetAddress.getByName("192.168.111.1"), 9999);

        socket.send(packet);

        //===接收从A端回复的信息
        byte[] buf = new byte[1024];
        packet = new DatagramPacket(buf, buf.length);
        socket.receive(packet);
        int length = packet.getLength();//得到实际接收到的数据字节长度
        byte[] data2 = packet.getData();//接收到数据
        System.out.println(new String(data2, 0, length));

        //3. 关闭流
        socket.close();
        System.out.println("B端退出...");
    }
}
